<?php
include_once "com/code/Controller.php";
include_once "com/code/View.php";
include_once "com/code/video/searchengine/VideoSearchEngineController.php";
include_once "com/code/video/menu/VideoMenuController.php";

/**
 * La home de esta aplicaión es simplemente un menú (VideoMenuController) y un 
 * controlaador de login (LoginController).
 * En esta clase están todos los métodos que utiliza la vista de la home (HomeView).
 * 
 * @author Marcelo Villarreal Fasanelli
 */
class HomeController extends Controller {
	
	// Id del controlador de login
//	private $loginControllerId;
	// Id del controlador de menú
	private $videoMenuControllerId;
	
	/**
	 * Constructor: crea el controlador de menú, el de login y se guarda las referencias.
	 * 
	 * @param $params Array con los parametros pasados.
	 */
	public function __construct($params) {
		// PHP no llama al constructor padre por defecto, hay que llamarlo explicitamente
		parent::__construct($params);
		
		// Se obtiene el id de este objeto para pasarlo como parametro
		// en la creacion del controlador de menú
		$params['homeControllerId'] = $this->getId();
		
		// Se crea el controlador de login y se guarda la referencia
//		$this->loginControllerId = Controller::newId("LoginController", $params);
		
		// Se guarda el id del controlador de login para pasarlo como parametro
		// en la creación del controlador de menú
		$params['loginControllerId'] = $this->loginControllerId;
		// Se crea el controlador de meú y se guarda la referencia
		$this->videoMenuControllerId = Controller::newId("VideoMenuController", $params);
	}
	
	/**
	 * Destructor: Si el objeto ha sido explicitamente borrado de la sesión
	 * se borrarán también los controladores de menú y de login.
	 */
	public function __destruct() {
		// Se comprueba que el bjeto fué borrado de la sessión
		if ($this->deleted()) {
			
			// Si el controlador de login no está vacío, se borra explicitamente de la sesión
			$loginController = $this->getLoginController();
			if (!empty($loginController)) {
				$loginController->sessionDelete();
			}
			
			// Si el controlador de mnú no está vacío, se borra explicitamente de la sesión
			$videoMenuController = $this->getVideoMenuController();
			if (!empty($videoMenuController)) {
				$videoMenuController->sessionDelete();
			}
		}
		
		// PHP no llama al destructor padre por defecto, hay que llamarlo explicitamente
		parent::__destruct();
	}
	
	/**
	 * Getter del controlador de login.
	 * 
	 * @return LoginController La instancia del controlador de login.
	 */
//	public function getLoginController() {
//		// Retorna la instancia de controlador de login guardada en la sesión.
//		return Controller::getController("LoginController", $this->loginControllerId);
//	}
	
	/**
	 * Getter del controlador de menú.
	 * 
	 * @return VideoMenuController La instancia del controlador de menú.
	 */
	public function getVideoMenuController() {
		return Controller::getController("VideoMenuController", $this->videoMenuControllerId);
	}
	
	/**
	 * Función que devuelve el identificador del controlador de menú.
	 * El identificador es devuelto como un array asociativo codificado
	 * como un objeto JSON, útil para hacer la llamada desde javascript (AJAX)
	 * 
	 * @param $params Array con los parámetros pasados.
	 */
//	public function getVideoMenuIdentifier($params) {
//		// Se obtiene el controlador de menú
//		$videoMenuController = $this->getVideoMenuController();
//		
//		// Se obtiene el identificador del controlador
//		$id = $videoMenuController->getControllerIdentifier();
//		
//		// Se escribe en el buffer de salida el identificador codificado como
//		// un objeto JSON
//		echo "(".json_encode($id).")";
//	}
	
	/**
	 * Metodo que redirecciona al navegador hacia el metodo $this->homePage($params).
	 * 
	 * @param $params Array con los parámetros pasados.
	 */
	public function getHomePage($params) {
		// Se hace la redirección hacia $this->homePage($params)
		$this->redirectAgentTo("homePage");
	}
	
	/**
	 * Función que devuelve la vista de la home que consta de sus propio contenido
	 * mas el contenido de las vistas del menú y del login.
	 * El contenido es devuelto escribiendo en el buffer de salida.
	 * 
	 * @param $params Array con los parámetros pasados.
	 */
	public function homePage($params) {
		// se crea el array que se le pasará a la vista de la home
		// con el contenido de la vista de login y de menú
		$vars = array();
		
		// Se crea la vista de la home
		$view = new View("com/code/home/HomeView.php");
		// Se le asigna a la vista de la home este objeto
		$view->assignController($this);
		
		// Se obtiene el controlador de login
//		$loginController = $this->getLoginController();
//		// Se inicia la captura en otro buffer
//		ob_start();
//		// Se obtiene el contenido de la vista de login
//		$loginController->getLoginView($params);
//		// Se guarda el contenido de la vista de login en $vars
//		$vars['loginView'] = ob_get_clean();
		
		// Se obtiene el controlador de menú
		$videoMenuController = $this->getVideoMenuController();
		// Se inicia la captura en otro buffer
		ob_start();
		// Se obtiene el contenido de la vista de menú
		$videoMenuController->getVideoMenuView($params);
		// Se guardael contenido de la vista de menú en $vars
		$vars['videoMenuView'] = ob_get_clean();
		
		// Se escribe en el buffer de salida el contenido de la vista de la home
		$view->display($vars);
	}
}
?>